package com.xc.pattern.template;

/**
 * @author xingchen
 * @description
 * @create 2022-09-04 20:29
 */
public abstract class AbstractProjectManager {

    /**
     * 定义模板方法，声明final,防止子类覆盖它，更改顺序，流程还是一样复用
     */
    public final void processProject() {
        review();

        design();

        coding();

        test();

        online();
    }

    /**
     * 各个项目都需要评审
     */
    public void review() {
        System.out.println("项目需求评审");
    }

    /**
     * 各个项目都需要设计
     */
    public void design() {
        System.out.println("架构 UI UE进行设计");
    }

    /**
     * 抽象方法，就由具体子类进行实现，编码耗时不一样
     */
    public abstract void coding();

    /**
     * 抽象方法，就由具体子类进行实现，测试有多种，自动化测试、安全测试、压力测试、手工测试
     */
    public abstract void test();

    /**
     * 抽象方法，就由具体子类进行实现，上线有全量发布、灰度发布、停机发布
     */
    public abstract void online();
}
